## Constructing classical Goppa codes

from PyM import *

# def classical_goppa_code(g,a):
#         a = vector(a)
#         h = vector([evaluate(g,t) for t in a])
#         h = 1/h
#         r = degree(g)
#         return AC(h,a,r)
# 
# Goppa=goppa=Goppa_Classic_Code=classical_goppa_code

# Example

[K,x] = extension(Zn(5),[1,0,-2],'x','K')
[A,T] = polynomial_ring(K,'T', name = 'K[T]')

g = T**6+T**3+T+1
R = find_roots(g,K)
show('root g:',R)
q = cardinal(K)

a = [pick(j,K) for j in range(1,q)]

r = [t for t in a if evaluate(g,t)==0]
print('roots g again:',r)

a = vector([t for t in a if evaluate(g,t)!=0])

C = goppa(g,a)
H = H_(C)
show(shape(H))

H1 = blow(H,Zn(5))
show(shape(H1))

H2 = prune(H1)
show(shape(H2))

# the following shows that C has dimension 7

k = len(a)-len(H2)
show('dim C =',k)



